home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d974.lha / DDLI / fpdio.c < prev    next >
C/C++ Source or Header  |  1994-01-04  |  3KB  |  140 lines

  1. /* FPDIO.C Copyright (C) 1993 Fergus Patrick Duniho */
  2.  
  3. #ifndef _FPDIO_C
  4. #define _FPDIO_C
  5.  
  6. #include <ctype.h>
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <string.h>
  10. #include <stdarg.h>
  11.  
  12. #define RdOpen(X,Y) X=FDOpen(Y, "r")
  13. #define WrOpen(X,Y) X=FDOpen(Y, "w")
  14. #define ApOpen(X,Y) X=FDOpen(Y, "a")
  15.  
  16. void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...);
  17. int wrdlen(char *s);
  18. int fgetp (FILE *fptr);
  19. FILE *FDOpen (const char *fn, const char *mode);
  20. int Linefeeds (char *fname);
  21. char *clone_line (FILE *fptr, int max);
  22. int yesno ();
  23.  
  24. void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...) {
  25.     va_list ap;
  26.     int i, j;
  27.  
  28.     va_start(ap, s);
  29.     for (j = ind; ; j = lm) {
  30.         for (i = 0; i < j; i++)
  31.             fputc (' ', fptr);
  32.         for (i = j; i < rm; i++)
  33.             switch (*s) {
  34.                 case 0:     /* End of string reached */
  35.                     if ((s = va_arg(ap, char *)) == 0) {
  36.                         fputc ('\n', fptr);
  37.                         va_end(ap);
  38.                         return;
  39.                     }
  40.                     if ((i + wrdlen(s)) >= rm)
  41.                         i = rm;
  42.                     else if (i > j)
  43.                         fputc (' ', fptr);
  44.                     break;
  45.                 case ' ':     /* End of word reached */
  46.                     if ((i + wrdlen(++s)) >= rm)
  47.                         i = rm;
  48.                     else if (i > j)
  49.                         fputc (' ', fptr);
  50.                     break;
  51.                 case '\n':    /* End of line reached */
  52.                     i = rm;
  53.                     s++;
  54.                     break;
  55.                 default:
  56.                     fputc (*s++, fptr);
  57.             }
  58.         fputc ('\n', fptr);
  59.         if ((*s == '\0') && ((s = va_arg(ap, char *)) == 0)) {
  60.             va_end(ap);
  61.             return;
  62.         }
  63.     }
  64. }
  65.  
  66. int wrdlen(char *s) {
  67.     int r;
  68.  
  69.     for (r = 0; *s != ' ' && *s != '\n' && *s != '\0'; r++, s++);
  70.     return r;
  71. }
  72.  
  73. int fgetp (FILE *fptr) {
  74.     int c, tot = 0;
  75.  
  76.     while (!isdigit(c = getc(fptr)))
  77.         if (c == EOF)
  78.             return EOF;
  79.     do {
  80.         tot *= 10;
  81.         tot += (c - '0');
  82.     } while (isdigit(c = getc(fptr)));
  83.     if (c != '\n')
  84.         ungetc (c, fptr);
  85.     return tot;
  86. }
  87.  
  88. FILE *FDOpen (const char *fn, const char *mode) {
  89.     FILE *fptr;
  90.  
  91.     if ((fptr = fopen(fn, mode)) == NULL) {
  92.         fprintf (stderr, "Could not open %s.", fn);
  93.         exit (2);
  94.     }
  95.     return fptr;
  96. }
  97.  
  98. int Linefeeds (char *fname) {
  99.     FILE *fptr;
  100.     int c, cnt = 0;
  101.  
  102.     RdOpen (fptr, fname);
  103.     while ((c = getc(fptr)) != EOF)
  104.         if (c == '\n')
  105.             cnt++;
  106.     fclose (fptr);
  107.     return cnt;
  108. }
  109.  
  110. char *clone_line (FILE *fptr, int max) {
  111.     char *s, *r, *t;
  112.     int i;
  113.  
  114.     s = (char *)malloc(max + 1);
  115.     t = s;
  116.     for (i = 0; (i < max) && ((*s = fgetc(fptr)) != '\n'); i++, s++);
  117.     if (*s != '\n')
  118.         ungetc(*s, fptr);
  119.     *s = '\0';
  120.     r = strdup(t);
  121.     free (t);
  122.     return r;
  123. }
  124.  
  125. int yesno () {
  126.     int c;
  127.  
  128.     for (;;) {
  129.         c = fgetc(stdin);
  130.         while (fgetc(stdin) != '\n');
  131.         if (c == 'y' || c == 'Y')
  132.             return 1;
  133.         if (c == 'n' || c == 'N')
  134.             return 0;
  135.         puts ("Please answer y or n.");
  136.     }
  137. }
  138.  
  139. #endif /* _FPDIO_C */
  140.